package test;

import java.util.Scanner;

public class CircleRolling {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // 小纸片个数  
        int m = scanner.nextInt(); // 大纸片个数  
        scanner.close();

        // 计算轨迹长度  
        double trackLength = calculateTrackLength(n, m);

        // 输出结果，保留3位小数  
        System.out.printf("%.3f\n", trackLength);
    }

    private static double calculateTrackLength(int n, int m) {
        // 小纸片的半径  
        double smallRadius = 1.0;
        // 大纸片和小纸片之间的间隙可以看作是一个半径为3的半圆弧  
        double gapRadius = 3.0;

        // 小纸片之间滚动的轨迹长度，每个小纸片经过的距离是两个半径  
        double smallPaperLength = 2 * smallRadius * n;

        // 计算大纸片可以填充的间隙数量  
        int filledGaps = Math.min(m, (n + 1) / 2); // 最多可以填充n个小纸片之间的n-1个间隙加上末尾的一个  

        // 大纸片填充的间隙带来的轨迹长度，每个间隙对应一个半径为3的半圆弧  
        double filledGapLength = Math.PI * gapRadius * filledGaps;

        // 如果小纸片数量为奇数，则最后一个小纸片后面还有一个半径为1的空间需要填充  
        if (n % 2 == 1) {
            smallPaperLength += 2 * smallRadius; // 加上最后一个小纸片后面的直径  
        }

        // 剩余的大纸片（如果有的话）直接放在末尾，每个大纸片带来一个半径为3的半圆弧  
        double remainingGapLength = Math.PI * gapRadius * (m - filledGaps);

        // 总轨迹长度  
        return smallPaperLength + filledGapLength + remainingGapLength;
    }
}